home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Users Group Library 1996 July
/
C-C++ Users Group Library July 1996.iso
/
listings
/
v_09_12
/
9n12088a
< prev
next >
Wrap
Text File
|
1991-07-25
|
6KB
|
200 lines
/** LISTING 6 ****** TERM.C **************************
Simple terminal emulation program that
demonstrates the use of the UART API.
*****************************************************/
#include <conio.h>
#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include "uart.h"
void Usage(void);
main()
{
static char a_funcname[] = "TERM-main:";
int retcode,running,rx_tx_char,input_echo;
unsigned int cur_port;
struct t_port_info *p_cur_port_info;
printf("\nTERM - Initializing...\n");
g_uart_irq = 4;
g_num_ports = 1;
/* Allocate space for an array where we will store
information about all the ports */
gp_port_info = (struct t_port_info *)
calloc(g_num_ports,sizeof(struct t_port_info));
if (gp_port_info == NULL)
{
fprintf(stderr,"%s No memory for port info\n",
a_funcname);
exit(1);
}
/* Set parameters for each port */
gp_port_info[0].base_address = 0x3f8; /* COM1 */
gp_port_info[0].baud_rate = 2400L;
gp_port_info[0].data_bits = 8;
gp_port_info[0].parity = 0; /* No Parity */
gp_port_info[0].stop_bits = 1;
/* Port will use hardware flow control */
gp_port_info[0].obey_rts_cts = 1;
/* Initialize the UART API */
retcode = Init_UART();
if (retcode == -1)
{
fprintf(stderr,
"%s Unable to initialize UART API\n",
a_funcname);
exit(1);
}
/* Display function key menu */
Usage();
cur_port = 1;
running = 1;
input_echo = 0;
printf("\nPort %u echo %s\n",cur_port,
(input_echo ? "on" : "off"));
while (running)
{
/* Check for received data */
rx_tx_char = Read_char(cur_port);
if (rx_tx_char >= 0)
{ /* Got something! */
/* Display the received character */
printf("%c",(rx_tx_char & 0x00ff));
/* Display any error conditions */
if (rx_tx_char & OVERRUN_ERROR)
printf("\n\tOVERRUN\t");
if (rx_tx_char & PARITY_ERROR)
printf("\n\tPARITY ERROR\t");
if (rx_tx_char & FRAMING_ERROR)
printf("\n\tFRAMING_ERROR\t");
if (rx_tx_char & BREAK_SIGNAL)
printf("\n\tBREAK\t");
if (rx_tx_char & RING_INDICATION)
printf("\n\tRING\t");
if (rx_tx_char & BUFFER_OVERRUN)
printf("\n\tBUFFER OVERRUN\t");
} /* End received something */
/* Check the keyboard */
if (kbhit())
{ /* A key has been hit, retrieve it */
rx_tx_char = getch();
if (rx_tx_char == 0)
{ /* Function key was pressed */
/* Read and process the extended scan
code */
rx_tx_char = getch();
switch (rx_tx_char)
{
/* F1 - Help */
case 59 :
Usage();
break;
/* F2 - Toggle port number */
case 60 :
cur_port++;
if (cur_port > g_num_ports)
cur_port = 1;
printf("\nPort %u\n",cur_port);
break;
/* F3 - View port status */
case 61 :
printf("\nPort %u echo %s\n",
cur_port,
(input_echo ? "on" : "off"));
/* Set pointer to port's info
entry */
p_cur_port_info =
&(gp_port_info[cur_port -1]);
printf("Base Address %4.4Xh\n",
p_cur_port_info->
base_address);
if (p_cur_port_info->
max_tx_chars > 1)
printf("\tUses FIFO\n\t");
else
printf("\tNo FIFO\n\t");
printf("DSR %s DCD %s CTS %s\n",
(p_cur_port_info->dsr_state ?
"on" : "off"),
(p_cur_port_info->dcd_state ?
"on" : "off"),
(p_cur_port_info->cts_state ?
"on" : "off") );
break;
/* F4 - Toggle input echo */
case 62 :
if (input_echo)
input_echo = 0;
else
input_echo = 1;
printf("\nEcho %s\n",
(input_echo ? "on" : "off"));
break;
/* F10 - Exit */
case 68 :
running = 0;
break;
default : break;
} /* End switch rx_tx_char */
} /* End function key was pressed */
else
{ /* Normal key was pressed */
/* If echo is turned on, display the
character entered */
if (input_echo)
printf("%c",(rx_tx_char & 0x00ff));
/* Transmit the entered character */
Send_char(cur_port,(char) (rx_tx_char & 0x00ff) );
} /* End normal key was pressed */
} /* End a key has been hit */
} /* End while running */
printf("\n\nShutting down...\n\n");
/* Exit to DOS after executing Exit_UART (registered
with atexit by Init_UART) */
exit(0);
}
void Usage(void)
{
printf("\nTERM: F1=Help (this text)");
printf("\n F2=Toggle current port number");
printf("\n F3=View port status");
printf("\n F4=Toggle input echo");
printf("\n F10=Exit\n");
return;
}